package org.project1;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class APP {
    public static void main(String[] args) throws InvocationTargetException, InstantiationException, IllegalAccessException {
        //创建一个集合用来存放用户选择的方法
        List<Integer> zhuanzhang  = new ArrayList<>();
        Collections.addAll(zhuanzhang,  2, 3);    // 使用 Collections.addAll 添加多个元素到列表中
        //相当于zhuanzhang.add(2);   sout(zhuanzhang); --> [2, 3]
        //zhuanzhang.add(3);

        trackerOptions(zhuanzhang,Order.class);
        System.out.println("-------------------------");
        List<Integer> fahuo = new ArrayList<>();
        Collections.addAll(fahuo, 0, 1, 4);

        trackerOptions(fahuo,Order.class);

    }

    public static void trackerOptions(List<Integer> list,Class<Order> opClass) throws InstantiationException, IllegalAccessException, InvocationTargetException {
        Object o=opClass.newInstance();   //创建 MyClass 的实例(空参对象)，并赋值给 Object 类型的变量 o
        //利用反射取出这个 opClass 中的所有方法
        Method[] methods = opClass.getDeclaredMethods();  //不包括继承方法
        for(int ordermethondid:list){
            for(Method m:methods){
                Step annotation = m.getAnnotation(Step.class);    //获取到方法上的注解
                if(annotation!=null){
                    //取出注解的参数
                    int id= annotation.id();
                    if(id==ordermethondid){
                        String description = annotation.description();
                        System.out.println("获取到了  方法"+id+"  描述:"+description);
                        m.invoke(o);
                    }
                }
            }
        }
    }
}
